package com.weim.weim.util;/**
 * @author ：ju
 * @date ：Created 2024/7/4 5:19 PM
 * @description：
 */



import com.baidu.aip.face.AipFace;
import com.weim.weim.entity.SysFileResource;
import com.weim.weim.entity.SysFileResourceDto;
import com.weim.weim.entity.SysVideoFrame;
import com.weim.weim.entity.VideoFrame;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang.StringUtils;
import org.bytedeco.javacv.FFmpegFrameGrabber;
import org.bytedeco.javacv.Frame;
import org.bytedeco.javacv.FrameGrabber;
import org.bytedeco.javacv.Java2DFrameConverter;
import org.json.JSONObject;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Configuration;
import org.springframework.stereotype.Component;
import org.springframework.web.multipart.MultipartFile;

import javax.imageio.ImageIO;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.*;
import java.util.*;
import java.util.List;


/**
 * @program: butt_baidu_demo
 *
 * @description:
 *
 * @author: ju
 *
 * @create: 2024-07-04 17:19
 **/

@Slf4j
@Component
@Configuration
public class FaceDetectionUtil {

    @Value("90635883")
    private String appId;
    @Value("7jlih2v1WuS5HdUESuKTDLr1")
    private String appKey;
    @Value("CBAYu23yiMijqRPuuTmIlIdDrIEGl2dI")
    private String secretKey;

    private static final String UPLOAD_FILE_IMG_TYPE = "jpg";


    private static Integer  frameSecond = 2;

    public static void main(String[] args) {
        try {
            // 假设你的图片文件路径是"path/to/your/image.jpg"
            String imagePath = "/Users/u0043780/Downloads/情绪识别.jpeg";


            // 注意：由于Base64编码会增加数据的大小（大约增加33%），
            // 因此请确保你的API调用不会受到请求大小限制的影响。

        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 将图片文件转换为Base64编码的字符串
     *

     * @return Base64编码的字符串
     * @throws IOException 如果读取文件时发生错误
     */
    public  String encodeImageToBase64Binary(String imagePath) {

        try{

            // 假设你的图片文件路径是"path/to/your/image.jpg"
            File imageFile = new File(imagePath);
            ByteArrayOutputStream baos = new ByteArrayOutputStream();

            // 读取图片文件到字节输出流中
            byte[] buffer = new byte[4096];
            int bytesRead;
            try (FileInputStream fis = new FileInputStream(imageFile)) {
                while ((bytesRead = fis.read(buffer)) != -1) {
                    baos.write(buffer, 0, bytesRead);
                }
            }

            // 使用Base64对字节数组进行编码
            byte[] bytes = baos.toByteArray();
            return Base64.getEncoder().encodeToString(bytes);
        }catch (Exception e){

        }
        return null;
    }


    /**
     * 调用百度云人脸检测
     * @param img
     * @return
     */
    public  String faceDetection(String img) {

        // 请求参数 Map
        HashMap<String, String> options = new HashMap<>();
        // 包括age,beauty,expression,face_shape,gender,glasses,landmark,landmark72，landmark150，race,quality,eye_status,emotion,face_type信息 逗号分隔. 默认只返回face_token、人脸框、概率和旋转角度
        options.put("face_field", "age,beauty,face_shape,emotion");
        // 最多处理人脸的数量，最大值10
        options.put("max_face_num", "1");
        // 	人脸的类型 LIVE表示生活照：通常为手机、相机拍摄的人像图片、或从网络获取的人像图片等IDCARD表示身份证芯片照：二代身份证内置芯片中的人像照片 WATERMARK表示带水印证件照：一般为带水印的小图，如公安网小图 CERT表示证件照片：如拍摄的身份证、工卡、护照、学生证等证件图片 默认LIVE
        options.put("face_type", "LIVE");
        // 活体检测控制 NONE: 不进行控制 LOW:较低的活体要求(高通过率 低攻击拒绝率) NORMAL: 一般的活体要求(平衡的攻击拒绝率, 通过率) HIGH: 较高的活体要求(高攻击拒绝率 低通过率)
        options.put("liveness_control", "LOW");

        // 图片类型 BASE64:图片的base64值，base64编码后的图片数据，编码后的图片大小不超过2M；URL:图片的 URL地址( 可能由于网络等原因导致下载图片时间过长)；FACE_TOKEN: 人脸图片的唯一标识，调用人脸检测接口时，会为每个人脸图片赋予一个唯一的FACE_TOKEN，同一张图片多次检测得到的FACE_TOKEN是同一个。
        String imageType = "BASE64";

        // 人脸检测
        JSONObject jsonObject = new AipFace(appId, appKey, secretKey).detect(img, imageType, options);
        System.out.println(jsonObject);
        return "success";
    }




}
